package com.itheima.Callable;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Test {

    //第三种创建方式：Callable
    //用Callable接口创建多线程，FutureTask类来实现
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //3.创建Callable接口的实现类对象
        MyCallable myCallable = new MyCallable();
        //4.封装对象到FutureTask类中，为了获取执行结果
        FutureTask<Integer> f = new FutureTask<Integer>(myCallable);
        //5.创建Thread类对象，构造方法中传递FutureTask对象
        Thread t = new Thread(f);
        //6.此处注册子线程，不会直接就执行
        t.start();
        //主线程定义一个方法

        //注意：主线程方法放在子线程执行过程中，才会有竞争
        int sum = 1;
        for (int i = 3; i < 100; i+=2) {
            sum += i;
            System.out.println("主线程：累加奇数。。。。。"+i);
        }
        //主线程
        System.out.println("主线程统计奇数和："+ sum);

        //7.使用FutureTask对象获取Callable接口的返回值
        Integer f1 = f.get();//注意：get方法会阻塞当前线程，直到获取到结果
        System.out.println("线程1统计偶数和的结果："+f1);
    }
}
